home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 19 / CU Amiga Magazine's Super CD-ROM 19 (1998)(EMAP Images)(GB)[!][issue 1998-02].iso / CUCD / Programming / LEDA / source / src / basic / _basic.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-16  |  3.6 KB  |  210 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  3.1c
  4. +
  5. +
  6. +  _basic.c
  7. +
  8. +
  9. +  Copyright (c) 1994  by  Max-Planck-Institut fuer Informatik
  10. +  Im Stadtwald, 6600 Saarbruecken, FRG     
  11. +  All rights reserved.
  12. *******************************************************************************/
  13.  
  14.  
  15. #include <LEDA/basic.h>
  16.  
  17. #include <time.h>
  18. #include <string.h>
  19. #include <sys/types.h>
  20.  
  21. #if defined(__MSDOS__)
  22. #include <dos.h>
  23. #else
  24. #include <unistd.h>
  25. #include <sys/times.h>
  26. #include <sys/param.h>
  27. #endif
  28.  
  29.  
  30. int LEDA::loop_dummy = 0;
  31.  
  32.  
  33. LEDA::LEDA()
  34. { init_list = getenv("LEDA_INIT");
  35.   init_random();
  36.  }
  37.  
  38.  
  39. LEDA::~LEDA() 
  40.   if (init_list && strcmp(init_list,"statistics")==0)
  41.   { if (version_string) printf("\n%s\n",version_string);
  42.     printf("\n");
  43.     print_statistics(); 
  44.    }
  45.  } 
  46.  
  47.  
  48. LEDA L_E_D_A;
  49.  
  50.  
  51.  
  52. //------------------------------------------------------------------------------
  53. // Error Handling
  54. //------------------------------------------------------------------------------
  55.  
  56.  
  57. PEH p_error_handler = default_error_handler;
  58.  
  59. void default_error_handler(int i, const char* s)
  60. { if (i==0) 
  61.    cout << "(warning) " << s << "\n";
  62.   else 
  63.    { cout << "ERROR "<< s << "\n";
  64.      cout.flush();
  65.      abort();
  66.     }
  67. }
  68.  
  69. PEH set_error_handler(PEH handler)
  70. { PEH old = error_handler;
  71.   p_error_handler = handler;
  72.   return old;
  73. }
  74.  
  75. //------------------------------------------------------------------------------
  76. // useful functions
  77. //------------------------------------------------------------------------------
  78.  
  79. LEDA_SIG_PF catch_interrupts(LEDA_SIG_PF handler) 
  80. { error_handler(0,"catch_interrupts not implemented.");
  81.   return handler; 
  82.  }
  83.  
  84.  
  85.  
  86. void init_random(int seed)
  87. { time_t l = seed;
  88.   if (l==0) time(&l);
  89.   srandom(int(l));
  90.  }
  91.  
  92.  
  93. #if defined(__MSDOS__) 
  94.  
  95. #if defined(__GNUG__)
  96. static long clock()
  97. { union REGS regs;
  98.   regs.h.ah=0x00;
  99.   int86(0x1A,®s,®s);
  100.   return (regs.x.cx << 16) + regs.x.dx;
  101. }
  102. #define CLK_TCK  18.2
  103. #endif
  104.  
  105. float used_time() { return  float(clock())/CLK_TCK; }
  106.  
  107. #else
  108.  
  109. /* For AMIGA */
  110. #define HZ 50
  111. float used_time()
  112. { tms x;
  113.   times(&x);
  114.   return  float(x.tms_utime)/HZ;
  115. }
  116.  
  117. #endif
  118.  
  119.  
  120. float used_time(float& T)
  121. { float t = T;
  122.   T =  used_time();
  123.   return  T-t;
  124. }
  125.  
  126.  
  127. void print_time(string s)
  128. { cout << s;
  129.   cout << string("  time= %.2f sec",used_time());
  130.   newline;
  131. }
  132.  
  133.  
  134. void wait(unsigned int sec) { sleep(sec); }
  135.   
  136.  
  137. //------------------------------------------------------------------------------
  138. // Input/Ouput
  139. //------------------------------------------------------------------------------
  140.  
  141.  
  142. int Yes(string s)
  143. { char answer = read_char(s);
  144.   return ((answer == 'y') || (answer == 'Y'));
  145. }
  146.  
  147. int read_int(string s)
  148. { int answer;
  149.   char c;
  150.  
  151.   for(;;)
  152.   { cout << s;
  153.     cin >> answer;
  154.     if (!cin) 
  155.       { cin.clear();
  156.         cin.get(c);
  157.         cout << string("read_int: illegal input \"%c\"\n",c);
  158.         if (c != '\n') skip_line(cin);
  159.        }
  160.     else  
  161.        break;
  162.    }
  163.  
  164.   skip_line(cin);
  165.  
  166.   return answer;
  167. }
  168.  
  169. char read_char(string s)
  170. { char c;
  171.   cout << s;
  172.   cin.get(c);
  173.   if (c != '\n') skip_line(cin);
  174.   return c;
  175. }
  176.  
  177. double read_real(string s)
  178. { double answer;
  179.   cout << s;
  180.   cin >> answer;
  181.   skip_line(cin);
  182.   return answer;
  183. }
  184.  
  185. string read_line(istream& in)
  186. { string result;
  187.   result.read_line(in); 
  188.   return result;
  189.  }
  190.  
  191. string read_string(string s)
  192. { cout << s << flush;
  193.   return read_line(cin); 
  194.  }
  195.  
  196. void skip_line(istream& s)
  197. { char c;
  198.   while(s.get(c) &&  c != '\n');
  199.  }
  200.  
  201.  
  202. int     Yes()              { return Yes(""); }
  203. int     read_int()         { return read_int(""); }
  204. char    read_char()        { return read_char(""); }
  205. double  read_real()        { return read_real(""); }
  206. string  read_string()      { return read_string(""); } 
  207.  
  208.